package material.wrapper;

/**
 * 装饰者（调料）--奶泡
 */
public class Whip extends CondimentDecorator {
    /**
     * 用一个实例变量记录饮料，也就是被装饰者。
     */
    Beverage beverage;

    /**
     * 想办法让被装饰者（饮料）被记录到实例变量中。这里的做法是:把饮科当作构造器的参数，再由构造器将此饮科记录在实例变量中
     *
     * @param beverage
     */
    public Whip(Beverage beverage) {
        this.beverage = beverage;
    }

    /**
     * 要计算带Mocha饮科的价钱。首先把调用委托给被装饰对象，以计算价钱．然后再加
     * Mocha的价钱．得到最后结果。
     *
     * @return
     */
    @Override
    public double cost() {
        return 0.40 + this.beverage.cost();
    }

    /**
     * 我们希望叙述不只是描述饮料（例“OarkRoast”) ，
     * 而是完整比连调科都描述出来(例如“DarkRoast，Mocha”) 。
     * 所以首先利用委托的做法，得到一个叙述，然后在其后加上附加的叙连（例“Mocha”)。
     *
     * @return
     */
    @Override
    public String getDescription() {
        return beverage.getDescription() + ",奶泡";
    }
}
